package cn.tedu.user.management.dao.persist.repository;

import cn.tedu.rtms.commons.pojo.vo.PageData;
import cn.tedu.user.management.pojo.entity.Section;
import cn.tedu.user.management.pojo.vo.SectionListItemVO;
import cn.tedu.user.management.pojo.vo.SectionStandardVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 处理部门数据的数据访问接口
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
public interface ISectionRepository {

    /**
     * 插入部门数据
     *
     * @param section 部门数据
     * @return 受影响的行数
     */
    int insert(Section section);

    /**
     * 批量插入部门数据
     *
     * @param sectionList 若干个部门数据的集合
     * @return 受影响的行数
     */
    //int insertBatch(List<Section> sectionList);

    /**
     * 根据部门id删除部门数据
     *
     * @param id 部门id
     * @return 受影响的行数
     */
    int deleteById(Long id);

    /**
     * 批量删除部门
     *
     * @param idList 需要删除的若干个部门的id
     * @return 受影响的行数
     */
    //int deleteByIds(Collection<Long> idList);

    /**
     * 根据部门id修改部门的数据
     *
     * @param section 封装了部门id和新的数据的对象
     * @return 受影响的行数
     */
    //int updateById(Section section);

    /**
     * 统计部门数据的数量
     *
     * @return 部门数据的数量
     */
    //int count();

    /**
     * 根据部门名统计部门数据的数量
     *
     * @param sectionName 部门名
     * @return 匹配部门名的部门数据的数据
     */
    int countBySectionName(String sectionName);

    /**
     * 根据部门名统计部门数据的数量
     *
     * @param realName 部门负责人姓名
     * @return 匹配部门负责人的数量
     */
    int countByRealName(String realName);

    /**
     * 根据手机号码统计部门数据的数量
     *
     * @param phone 手机号码
     * @return 匹配手机号码的部门数据的数据
     */
    //int countByPhone(String phone);

    /**
     * 根据电子邮箱统计部门数据的数量
     *
     * @param email 电子邮箱
     * @return 匹配电子邮箱的部门数据的数据
     */
    //int countByEmail(String email);

    /**
     * 根据部门id查询部门数据详情
     *
     * @param id 部门id
     * @return 匹配的部门数据详情，如果没有匹配的数据，则返回null
     */
    SectionStandardVO getStandardById(Long id);

    /**
     * 根据部门名查询部门的登录信息
     *
     * @param sectionname 部门名
     * @return 匹配的部门的登录信息，如果没有匹配的数据，则返回null
     */
    //SectionLoginInfoVO getLoginInfoBySectionname(String sectionname);

    /**
     * 查询部门数据列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 部门数据列表
     */
    PageData<SectionListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 查询部门数据列表
     *
     * @return 部门数据列表(不分页)
     */
    List<SectionListItemVO> list();

    /**
     * 查询子级部门数据列表
     *
     * @return 子级部门数据列表(不分页)
     */
    List<SectionListItemVO> list(Long parentId);

    /**
     * 查询部门数据列表
     *
     * @return 招聘部门数据列表(不分页)
     */
    List<SectionListItemVO> enableList();

    /**
     * 根据id修改部门数据
     *
     * @param section 封装了部门id和新数据的对象
     * @return 受影响的行数
     */
    int update(Section section);

    /**
     * 统计非某id但名称匹配的相册数据的数量，用于检查是否存在其它数据使用了相同的名称
     *
     * @param id   相册ID
     * @param sectionName 部门部门名
     * @return 匹配名称但不匹配ID的数据的数量
     */
    int countBySectionNameAndNotId(@Param("id") Long id, @Param("sectionName") String sectionName);

    /*
    * 根据员工姓名查询员工id
    */
    Long selectUserIdByRealName(String realName);


    /*
    * 根据id查询isParent
    */
    Integer selectIsParentById(Long id);

    /*
     * 根据id查询parentId
     */
    Long selectParentIdById(Long id);

    /*
    * 查询父级部门下的子级部门数量
    */
    int childrenSectionCountByParentId(Long parentId);

    /*
    * 修改父级部门的isParent为0
    */
    int updateParentSectionIsParent(Long parentId);

    /*
     * 根据用户id查询head_id数量
     */
    int countByUserId(Long id);

}
